<?php

/**
 * DB 프로시저 관련 추상화 클래스 
 * 
 * @package php.db.proc
 */

/**
 * 오라클 프로시저 
 * 
 * 
 * @author easylogic
 * @package php.db.proc
 */
class OracleProc extends DBProc { 
	
	private $_statement;
	
	public function __construct(DBClient $connector, $name = '', $option = array()) { 
		parent::__construct($connector, $name, $option);	
	}
	
	/**
	 * 프로시저 실행 
	 *
	 * 이 클래스를 상속하는 클래스는 spExecute 메소드를 통해서 저장프로시저의 실행을 지정할 수 있습니다.
	 * 
	 */
	public function execute()  {
		$conn = $this->getConnector();
		
		$bind_list = "";
		$keys = array_keys($this->_bind);

		// 전체 문법 적용시
		if ($this->_option['type'] == 'sql') { 
			$str = $this->_name;
		} 
		// 매개변수별 적용시 
		else { 

			// 바인딩 리스트 만들기 
			foreach ( $keys as $key) { 
				// 이름 설정 
				$bind_list[] = ':'.$this->_bind[$key]['name'];
			}

			$bind_list = implode(",", $bind_list);

			// 프로시저 문자열 만들기 
			$str = "BEGIN {$this->_name}($bind_list); END;";
		}


		$this->_statement = $conn->prepare($str);

		// 바인딩 시키기 
		foreach ($keys as $key) { 

			$conn->bind(
				$this->_bind[$key]['name'],
				$this->_bind[$key]['type'],
				$this->_bind[$key]['output'],
				$this->_bind[$key]['length'],
				$this->_bind[$key]['value']			
			);
		}

		$this->_result = $conn->execute(OCI_DEFAULT);

		// 프로시저 실행 
		return $this->_result;
	}
}
?>